# ApplicationController类是整个应用的基础控制器，
# 它继承自ActionController::Base，包含了全局的控制器逻辑。
class ApplicationController < ActionController::Base
  # 允许现代浏览器使用其最新的特性，
  # 这有助于提高应用的安全性和性能。
  allow_browser versions: :modern

  # 启用CSRF保护机制，使用异常方式来处理不通过验证的请求。
  # 这是为了防止跨站请求伪造攻击，提高应用的安全性。
  protect_from_forgery with: :exception
  # 对 /api/* 路径跳过 CSRF 验证
  skip_forgery_protection if: -> { request.path.start_with?("/api") }
  # 这样做可以简化用户认证和会话管理的代码。
  include UserSession
  # 当抛出ActiveRecord::RecordNotFound异常时，使用render_not_found方法处理。
  # 这样可以优雅地处理资源未找到的情况，提升用户体验。
  rescue_from ActiveRecord::RecordNotFound, with: :render_not_found

  # 私有方法render_not_found用于处理资源未找到的情况。
  # 它渲染出一个自定义的404错误页面，状态码设置为404，不使用布局。
  private
  def render_not_found
    render file: "#{Rails.root}/public/404.html", status: 404, layout: false
  end


  # 在每个请求之前，使用authenticate_request方法来验证用户的身份。
  before_action :authenticate_request




  private
  def authenticate_request
    header = request.headers["Authorization"]
    token = header.split(" ").last if header

    begin
      @decoded = JWT.decode(token, Rails.application.credentials.secret_key_base)[0]
      @current_user = User.find(@decoded[:user_id])
    rescue
      render json: { error: "未授权的访问" }, status: :unauthorized
    end
  end

end
